const express = require('express')
// 配置跨域组件
const cors = require('cors')
// 导入路由模块
const userRouter = require('./router/user.js')
const userinfoRouter = require('./router/userinfo.js') 
const joi = require('@hapi/joi')
const config = require('./config')
const artCateRouter = require('./router/artcate.js')
const articleRouter = require('./router/article')

// 解析token的中间件
const expressJWT = require('express-jwt')


const app = express()
app.use(cors())
// 配置解析表单中间件
app.use(express.urlencoded({extended:false}))


// 使用 .unless({ path: [/^\/api\//] }) 指定哪些接口不需要进行 Token 的身份认证 
app.use(expressJWT({ secret:config.jwtSecretKey }).unless({ path: [/^\/api\//] }))

// 错误中间件 (有问题，发送不到前端页面)
app.use(function (err, req, res, next) { 
    // 数据验证失败 
    if (err instanceof joi.ValidationError) return res.send({status:1,message:err.message}) 
    if(err.name === 'UnauthorizedError'){
        return res.send({status:1,message:'身份认证失败'})
    }
    // 未知错误 
    res.send({status:1,message:err.message})
    
})

// 托管静态资源文件 
app.use('/uploads', express.static('./uploads'))

// 使用路由模块
app.use('/api',userRouter)
app.use('/my',userinfoRouter)
app.use('/my/article', artCateRouter)
app.use('/my/article',articleRouter)


app.listen(3007,()=>{
    console.log('server running at http://127.0.0.1:3007');
})